// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
// an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
// specific language governing permissions and limitations under the License.

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by google-apis-code-generator 1.5.1
//     C# generator version: 1.22.0
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

/**
 * \brief
 *   Blogger API Version v3
 *
 * \section ApiInfo API Version Information
 *    <table>
 *      <tr><th>API
 *          <td><a href='https://developers.google.com/blogger/docs/3.0/getting_started'>Blogger API</a>
 *      <tr><th>API Version<td>v3
 *      <tr><th>API Rev<td>20150422 (111)
 *      <tr><th>API Docs
 *          <td><a href='https://developers.google.com/blogger/docs/3.0/getting_started'>
 *              https://developers.google.com/blogger/docs/3.0/getting_started</a>
 *      <tr><th>Discovery Name<td>blogger
 *    </table>
 *
 * \section ForMoreInfo For More Information
 *
 * The complete API documentation for using Blogger API can be found at
 * <a href='https://developers.google.com/blogger/docs/3.0/getting_started'>https://developers.google.com/blogger/docs/3.0/getting_started</a>.
 *
 * For more information about the Google APIs Client Library for .NET, see
 * <a href='https://developers.google.com/api-client-library/dotnet/get_started'>
 * https://developers.google.com/api-client-library/dotnet/get_started</a>
 */

namespace Google.Apis.Blogger.v3
{
    /// <summary>The Blogger Service.</summary>
    public class BloggerService : Google.Apis.Services.BaseClientService
    {
        /// <summary>The API version.</summary>
        public const string Version = "v3";

        /// <summary>The discovery version used to generate this service.</summary>
        public static Google.Apis.Discovery.DiscoveryVersion DiscoveryVersionUsed =
            Google.Apis.Discovery.DiscoveryVersion.Version_1_0;

        /// <summary>Constructs a new service.</summary>
        public BloggerService() :
            this(new Google.Apis.Services.BaseClientService.Initializer()) {}

        /// <summary>Constructs a new service.</summary>
        /// <param name="initializer">The service initializer.</param>
        public BloggerService(Google.Apis.Services.BaseClientService.Initializer initializer)
            : base(initializer)
        {
            blogUserInfos = new BlogUserInfosResource(this);
            blogs = new BlogsResource(this);
            comments = new CommentsResource(this);
            pageViews = new PageViewsResource(this);
            pages = new PagesResource(this);
            postUserInfos = new PostUserInfosResource(this);
            posts = new PostsResource(this);
            users = new UsersResource(this);
        }

        /// <summary>Gets the service supported features.</summary>
        public override System.Collections.Generic.IList<string> Features
        {
            get { return new string[0]; }
        }

        /// <summary>Gets the service name.</summary>
        public override string Name
        {
            get { return "blogger"; }
        }

        /// <summary>Gets the service base URI.</summary>
        public override string BaseUri
        {
            get { return "https://www.googleapis.com/blogger/v3/"; }
        }

        /// <summary>Gets the service base path.</summary>
        public override string BasePath
        {
            get { return "blogger/v3/"; }
        }

        /// <summary>Available OAuth 2.0 scopes for use with the Blogger API.</summary>
        public class Scope
        {
            /// <summary>Manage your Blogger account</summary>
            public static string Blogger = "https://www.googleapis.com/auth/blogger";

            /// <summary>View your Blogger account</summary>
            public static string BloggerReadonly = "https://www.googleapis.com/auth/blogger.readonly";

        }



        private readonly BlogUserInfosResource blogUserInfos;

        /// <summary>Gets the BlogUserInfos resource.</summary>
        public virtual BlogUserInfosResource BlogUserInfos
        {
            get { return blogUserInfos; }
        }

        private readonly BlogsResource blogs;

        /// <summary>Gets the Blogs resource.</summary>
        public virtual BlogsResource Blogs
        {
            get { return blogs; }
        }

        private readonly CommentsResource comments;

        /// <summary>Gets the Comments resource.</summary>
        public virtual CommentsResource Comments
        {
            get { return comments; }
        }

        private readonly PageViewsResource pageViews;

        /// <summary>Gets the PageViews resource.</summary>
        public virtual PageViewsResource PageViews
        {
            get { return pageViews; }
        }

        private readonly PagesResource pages;

        /// <summary>Gets the Pages resource.</summary>
        public virtual PagesResource Pages
        {
            get { return pages; }
        }

        private readonly PostUserInfosResource postUserInfos;

        /// <summary>Gets the PostUserInfos resource.</summary>
        public virtual PostUserInfosResource PostUserInfos
        {
            get { return postUserInfos; }
        }

        private readonly PostsResource posts;

        /// <summary>Gets the Posts resource.</summary>
        public virtual PostsResource Posts
        {
            get { return posts; }
        }

        private readonly UsersResource users;

        /// <summary>Gets the Users resource.</summary>
        public virtual UsersResource Users
        {
            get { return users; }
        }
    }

    ///<summary>A base abstract class for Blogger requests.</summary>
    public abstract class BloggerBaseServiceRequest<TResponse> : Google.Apis.Requests.ClientServiceRequest<TResponse>
    {
        ///<summary>Constructs a new BloggerBaseServiceRequest instance.</summary>
        protected BloggerBaseServiceRequest(Google.Apis.Services.IClientService service)
            : base(service)
        {
        }

        /// <summary>Data format for the response.</summary>
        /// [default: json]
        [Google.Apis.Util.RequestParameterAttribute("alt", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<AltEnum> Alt { get; set; }

        /// <summary>Data format for the response.</summary>
        public enum AltEnum
        {
            /// <summary>Responses with Content-Type of application/json</summary>
            [Google.Apis.Util.StringValueAttribute("json")]
            Json,
        }

        /// <summary>Selector specifying which fields to include in a partial response.</summary>
        [Google.Apis.Util.RequestParameterAttribute("fields", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Fields { get; set; }

        /// <summary>API key. Your API key identifies your project and provides you with API access, quota, and reports.
        /// Required unless you provide an OAuth 2.0 token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("key", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Key { get; set; }

        /// <summary>OAuth 2.0 token for the current user.</summary>
        [Google.Apis.Util.RequestParameterAttribute("oauth_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string OauthToken { get; set; }

        /// <summary>Returns response with indentations and line breaks.</summary>
        /// [default: true]
        [Google.Apis.Util.RequestParameterAttribute("prettyPrint", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<bool> PrettyPrint { get; set; }

        /// <summary>Available to use for quota purposes for server-side applications. Can be any arbitrary string
        /// assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.</summary>
        [Google.Apis.Util.RequestParameterAttribute("quotaUser", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string QuotaUser { get; set; }

        /// <summary>IP address of the site where the request originates. Use this if you want to enforce per-user
        /// limits.</summary>
        [Google.Apis.Util.RequestParameterAttribute("userIp", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string UserIp { get; set; }

        /// <summary>Initializes Blogger parameter list.</summary>
        protected override void InitParameters()
        {
            base.InitParameters();

            RequestParameters.Add(
                "alt", new Google.Apis.Discovery.Parameter
                {
                    Name = "alt",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "json",
                    Pattern = null,
                });
            RequestParameters.Add(
                "fields", new Google.Apis.Discovery.Parameter
                {
                    Name = "fields",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "key", new Google.Apis.Discovery.Parameter
                {
                    Name = "key",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "oauth_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "oauth_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "prettyPrint", new Google.Apis.Discovery.Parameter
                {
                    Name = "prettyPrint",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "true",
                    Pattern = null,
                });
            RequestParameters.Add(
                "quotaUser", new Google.Apis.Discovery.Parameter
                {
                    Name = "quotaUser",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "userIp", new Google.Apis.Discovery.Parameter
                {
                    Name = "userIp",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
        }
    }

    /// <summary>The "blogUserInfos" collection of methods.</summary>
    public class BlogUserInfosResource
    {
        private const string Resource = "blogUserInfos";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public BlogUserInfosResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Gets one blog and user info pair by blogId and userId.</summary>
        /// <param name="userId">ID of the user whose blogs are to be fetched. Either the word 'self' (sans quote marks) or the
        /// user's profile identifier.</param>
        /// <param name="blogId">The ID of the blog to get.</param>
        public virtual GetRequest Get(string userId, string blogId)
        {
            return new GetRequest(service, userId, blogId);
        }

        /// <summary>Gets one blog and user info pair by blogId and userId.</summary>
        public class GetRequest : BloggerBaseServiceRequest<Google.Apis.Blogger.v3.Data.BlogUserInfo>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string userId, string blogId)
                : base(service)
            {
                UserId = userId;
                BlogId = blogId;
                InitParameters();
            }


            /// <summary>ID of the user whose blogs are to be fetched. Either the word 'self' (sans quote marks) or the
            /// user's profile identifier.</summary>
            [Google.Apis.Util.RequestParameterAttribute("userId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string UserId { get; private set; }

            /// <summary>The ID of the blog to get.</summary>
            [Google.Apis.Util.RequestParameterAttribute("blogId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string BlogId { get; private set; }

            /// <summary>Maximum number of posts to pull back with the blog.</summary>
            [Google.Apis.Util.RequestParameterAttribute("maxPosts", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxPosts { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "users/{userId}/blogs/{blogId}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "userId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "userId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "blogId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "blogId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "maxPosts", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxPosts",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }

    /// <summary>The "blogs" collection of methods.</summary>
    public class BlogsResource
    {
        private const string Resource = "blogs";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public BlogsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Gets one blog by ID.</summary>
        /// <param name="blogId">The ID of the blog to get.</param>
        public virtual GetRequest Get(string blogId)
        {
            return new GetRequest(service, blogId);
        }

        /// <summary>Gets one blog by ID.</summary>
        public class GetRequest : BloggerBaseServiceRequest<Google.Apis.Blogger.v3.Data.Blog>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string blogId)
                : base(service)
            {
                BlogId = blogId;
                InitParameters();
            }


            /// <summary>The ID of the blog to get.</summary>
            [Google.Apis.Util.RequestParameterAttribute("blogId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string BlogId { get; private set; }

            /// <summary>Maximum number of posts to pull back with the blog.</summary>
            [Google.Apis.Util.RequestParameterAttribute("maxPosts", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxPosts { get; set; }

            /// <summary>Access level with which to view the blog. Note that some fields require elevated
            /// access.</summary>
            [Google.Apis.Util.RequestParameterAttribute("view", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<ViewEnum> View { get; set; }

            /// <summary>Access level with which to view the blog. Note that some fields require elevated
            /// access.</summary>
            public enum ViewEnum
            {
                /// <summary>Admin level detail.</summary>
                [Google.Apis.Util.StringValueAttribute("ADMIN")]
                ADMIN,
                /// <summary>Author level detail.</summary>
                [Google.Apis.Util.StringValueAttribute("AUTHOR")]
                AUTHOR,
                /// <summary>Reader level detail.</summary>
                [Google.Apis.Util.StringValueAttribute("READER")]
                READER,
            }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "blogs/{blogId}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "blogId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "blogId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "maxPosts", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxPosts",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "view", new Google.Apis.Discovery.Parameter
                    {
                        Name = "view",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Retrieve a Blog by URL.</summary>
        /// <param name="url">The URL of the blog to retrieve.</param>
        public virtual GetByUrlRequest GetByUrl(string url)
        {
            return new GetByUrlRequest(service, url);
        }

        /// <summary>Retrieve a Blog by URL.</summary>
        public class GetByUrlRequest : BloggerBaseServiceRequest<Google.Apis.Blogger.v3.Data.Blog>
        {
            /// <summary>Constructs a new GetByUrl request.</summary>
            public GetByUrlRequest(Google.Apis.Services.IClientService service, string url)
                : base(service)
            {
                Url = url;
                InitParameters();
            }


            /// <summary>The URL of the blog to retrieve.</summary>
            [Google.Apis.Util.RequestParameterAttribute("url", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Url { get; private set; }

            /// <summary>Access level with which to view the blog. Note that some fields require elevated
            /// access.</summary>
            [Google.Apis.Util.RequestParameterAttribute("view", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<ViewEnum> View { get; set; }

            /// <summary>Access level with which to view the blog. Note that some fields require elevated
            /// access.</summary>
            public enum ViewEnum
            {
                /// <summary>Admin level detail.</summary>
                [Google.Apis.Util.StringValueAttribute("ADMIN")]
                ADMIN,
                /// <summary>Author level detail.</summary>
                [Google.Apis.Util.StringValueAttribute("AUTHOR")]
                AUTHOR,
                /// <summary>Reader level detail.</summary>
                [Google.Apis.Util.StringValueAttribute("READER")]
                READER,
            }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "getByUrl"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "blogs/byurl"; }
            }

            /// <summary>Initializes GetByUrl parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "url", new Google.Apis.Discovery.Parameter
                    {
                        Name = "url",
                        IsRequired = true,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "view", new Google.Apis.Discovery.Parameter
                    {
                        Name = "view",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Retrieves a list of blogs, possibly filtered.</summary>
        /// <param name="userId">ID of the user whose blogs are to be fetched. Either the word 'self' (sans quote marks) or the
        /// user's profile identifier.</param>
        public virtual ListByUserRequest ListByUser(string userId)
        {
            return new ListByUserRequest(service, userId);
        }

        /// <summary>Retrieves a list of blogs, possibly filtered.</summary>
        public class ListByUserRequest : BloggerBaseServiceRequest<Google.Apis.Blogger.v3.Data.BlogList>
        {
            /// <summary>Constructs a new ListByUser request.</summary>
            public ListByUserRequest(Google.Apis.Services.IClientService service, string userId)
                : base(service)
            {
                UserId = userId;
                InitParameters();
            }


            /// <summary>ID of the user whose blogs are to be fetched. Either the word 'self' (sans quote marks) or the
            /// user's profile identifier.</summary>
            [Google.Apis.Util.RequestParameterAttribute("userId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string UserId { get; private set; }

            /// <summary>Whether the response is a list of blogs with per-user information instead of just
            /// blogs.</summary>
            [Google.Apis.Util.RequestParameterAttribute("fetchUserInfo", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> FetchUserInfo { get; set; }

            /// <summary>User access types for blogs to include in the results, e.g. AUTHOR will return blogs where the
            /// user has author level access. If no roles are specified, defaults to ADMIN and AUTHOR roles.</summary>
            [Google.Apis.Util.RequestParameterAttribute("role", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<RoleEnum> Role { get; set; }

            /// <summary>User access types for blogs to include in the results, e.g. AUTHOR will return blogs where the
            /// user has author level access. If no roles are specified, defaults to ADMIN and AUTHOR roles.</summary>
            public enum RoleEnum
            {
                /// <summary>Admin role - Blogs where the user has Admin level access.</summary>
                [Google.Apis.Util.StringValueAttribute("ADMIN")]
                ADMIN,
                /// <summary>Author role - Blogs where the user has Author level access.</summary>
                [Google.Apis.Util.StringValueAttribute("AUTHOR")]
                AUTHOR,
                /// <summary>Reader role - Blogs where the user has Reader level access (to a private blog).</summary>
                [Google.Apis.Util.StringValueAttribute("READER")]
                READER,
            }

            /// <summary>Blog statuses to include in the result (default: Live blogs only). Note that ADMIN access is
            /// required to view deleted blogs.</summary>
            /// [default: LIVE]
            [Google.Apis.Util.RequestParameterAttribute("status", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<StatusEnum> Status { get; set; }

            /// <summary>Blog statuses to include in the result (default: Live blogs only). Note that ADMIN access is
            /// required to view deleted blogs.</summary>
            public enum StatusEnum
            {
                /// <summary>Blog has been deleted by an administrator.</summary>
                [Google.Apis.Util.StringValueAttribute("DELETED")]
                DELETED,
                /// <summary>Blog is currently live.</summary>
                [Google.Apis.Util.StringValueAttribute("LIVE")]
                LIVE,
            }

            /// <summary>Access level with which to view the blogs. Note that some fields require elevated
            /// access.</summary>
            [Google.Apis.Util.RequestParameterAttribute("view", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<ViewEnum> View { get; set; }

            /// <summary>Access level with which to view the blogs. Note that some fields require elevated
            /// access.</summary>
            public enum ViewEnum
            {
                /// <summary>Admin level detail.</summary>
                [Google.Apis.Util.StringValueAttribute("ADMIN")]
                ADMIN,
                /// <summary>Author level detail.</summary>
                [Google.Apis.Util.StringValueAttribute("AUTHOR")]
                AUTHOR,
                /// <summary>Reader level detail.</summary>
                [Google.Apis.Util.StringValueAttribute("READER")]
                READER,
            }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "listByUser"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "users/{userId}/blogs"; }
            }

            /// <summary>Initializes ListByUser parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "userId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "userId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "fetchUserInfo", new Google.Apis.Discovery.Parameter
                    {
                        Name = "fetchUserInfo",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "role", new Google.Apis.Discovery.Parameter
                    {
                        Name = "role",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "status", new Google.Apis.Discovery.Parameter
                    {
                        Name = "status",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "LIVE",
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "view", new Google.Apis.Discovery.Parameter
                    {
                        Name = "view",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }

    /// <summary>The "comments" collection of methods.</summary>
    public class CommentsResource
    {
        private const string Resource = "comments";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public CommentsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Marks a comment as not spam.</summary>
        /// <param name="blogId">The ID of the Blog.</param>
        /// <param name="postId">The ID of the Post.</param>
        ///
        /// <param name="commentId">The ID of the comment to mark as not spam.</param>
        public virtual ApproveRequest Approve(string blogId, string postId, string commentId)
        {
            return new ApproveRequest(service, blogId, postId, commentId);
        }

        /// <summary>Marks a comment as not spam.</summary>
        public class ApproveRequest : BloggerBaseServiceRequest<Google.Apis.Blogger.v3.Data.Comment>
        {
            /// <summary>Constructs a new Approve request.</summary>
            public ApproveRequest(Google.Apis.Services.IClientService service, string blogId, string postId, string commentId)
                : base(service)
            {
                BlogId = blogId;
                PostId = postId;
                CommentId = commentId;
                InitParameters();
            }


            /// <summary>The ID of the Blog.</summary>
            [Google.Apis.Util.RequestParameterAttribute("blogId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string BlogId { get; private set; }

            /// <summary>The ID of the Post.</summary>
            [Google.Apis.Util.RequestParameterAttribute("postId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string PostId { get; private set; }

            /// <summary>The ID of the comment to mark as not spam.</summary>
            [Google.Apis.Util.RequestParameterAttribute("commentId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string CommentId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "approve"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "blogs/{blogId}/posts/{postId}/comments/{commentId}/approve"; }
            }

            /// <summary>Initializes Approve parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "blogId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "blogId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "postId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "postId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "commentId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "commentId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Delete a comment by ID.</summary>
        /// <param name="blogId">The ID of the Blog.</param>
        /// <param name="postId">The ID of the Post.</param>
        ///
        /// <param name="commentId">The ID of the comment to delete.</param>
        public virtual DeleteRequest Delete(string blogId, string postId, string commentId)
        {
            return new DeleteRequest(service, blogId, postId, commentId);
        }

        /// <summary>Delete a comment by ID.</summary>
        public class DeleteRequest : BloggerBaseServiceRequest<string>
        {
            /// <summary>Constructs a new Delete request.</summary>
            public DeleteRequest(Google.Apis.Services.IClientService service, string blogId, string postId, string commentId)
                : base(service)
            {
                BlogId = blogId;
                PostId = postId;
                CommentId = commentId;
                InitParameters();
            }


            /// <summary>The ID of the Blog.</summary>
            [Google.Apis.Util.RequestParameterAttribute("blogId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string BlogId { get; private set; }

            /// <summary>The ID of the Post.</summary>
            [Google.Apis.Util.RequestParameterAttribute("postId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string PostId { get; private set; }

            /// <summary>The ID of the comment to delete.</summary>
            [Google.Apis.Util.RequestParameterAttribute("commentId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string CommentId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "delete"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "DELETE"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "blogs/{blogId}/posts/{postId}/comments/{commentId}"; }
            }

            /// <summary>Initializes Delete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "blogId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "blogId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "postId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "postId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "commentId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "commentId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Gets one comment by ID.</summary>
        /// <param name="blogId">ID of the blog to containing the comment.</param>
        /// <param name="postId">ID of the post
        /// to fetch posts from.</param>
        /// <param name="commentId">The ID of the comment to get.</param>
        public virtual GetRequest Get(string blogId, string postId, string commentId)
        {
            return new GetRequest(service, blogId, postId, commentId);
        }

        /// <summary>Gets one comment by ID.</summary>
        public class GetRequest : BloggerBaseServiceRequest<Google.Apis.Blogger.v3.Data.Comment>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string blogId, string postId, string commentId)
                : base(service)
            {
                BlogId = blogId;
                PostId = postId;
                CommentId = commentId;
                InitParameters();
            }


            /// <summary>ID of the blog to containing the comment.</summary>
            [Google.Apis.Util.RequestParameterAttribute("blogId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string BlogId { get; private set; }

            /// <summary>ID of the post to fetch posts from.</summary>
            [Google.Apis.Util.RequestParameterAttribute("postId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string PostId { get; private set; }

            /// <summary>The ID of the comment to get.</summary>
            [Google.Apis.Util.RequestParameterAttribute("commentId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string CommentId { get; private set; }

            /// <summary>Access level for the requested comment (default: READER). Note that some comments will require
            /// elevated permissions, for example comments where the parent posts which is in a draft state, or comments
            /// that are pending moderation.</summary>
            [Google.Apis.Util.RequestParameterAttribute("view", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<ViewEnum> View { get; set; }

            /// <summary>Access level for the requested comment (default: READER). Note that some comments will require
            /// elevated permissions, for example comments where the parent posts which is in a draft state, or comments
            /// that are pending moderation.</summary>
            public enum ViewEnum
            {
                /// <summary>Admin level detail</summary>
                [Google.Apis.Util.StringValueAttribute("ADMIN")]
                ADMIN,
                /// <summary>Author level detail</summary>
                [Google.Apis.Util.StringValueAttribute("AUTHOR")]
                AUTHOR,
                /// <summary>Admin level detail</summary>
                [Google.Apis.Util.StringValueAttribute("READER")]
                READER,
            }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "blogs/{blogId}/posts/{postId}/comments/{commentId}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "blogId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "blogId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "postId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "postId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "commentId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "commentId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "view", new Google.Apis.Discovery.Parameter
                    {
                        Name = "view",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Retrieves the comments for a post, possibly filtered.</summary>
        /// <param name="blogId">ID of the blog to fetch comments from.</param>
        /// <param name="postId">ID of the post to
        /// fetch posts from.</param>
        public virtual ListRequest List(string blogId, string postId)
        {
            return new ListRequest(service, blogId, postId);
        }

        /// <summary>Retrieves the comments for a post, possibly filtered.</summary>
        public class ListRequest : BloggerBaseServiceRequest<Google.Apis.Blogger.v3.Data.CommentList>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, string blogId, string postId)
                : base(service)
            {
                BlogId = blogId;
                PostId = postId;
                InitParameters();
            }


            /// <summary>ID of the blog to fetch comments from.</summary>
            [Google.Apis.Util.RequestParameterAttribute("blogId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string BlogId { get; private set; }

            /// <summary>ID of the post to fetch posts from.</summary>
            [Google.Apis.Util.RequestParameterAttribute("postId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string PostId { get; private set; }

            /// <summary>Latest date of comment to fetch, a date-time with RFC 3339 formatting.</summary>
            [Google.Apis.Util.RequestParameterAttribute("endDate", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<System.DateTime> EndDate { get; set; }

            /// <summary>Whether the body content of the comments is included.</summary>
            [Google.Apis.Util.RequestParameterAttribute("fetchBodies", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> FetchBodies { get; set; }

            /// <summary>Maximum number of comments to include in the result.</summary>
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxResults { get; set; }

            /// <summary>Continuation token if request is paged.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }

            /// <summary>Earliest date of comment to fetch, a date-time with RFC 3339 formatting.</summary>
            [Google.Apis.Util.RequestParameterAttribute("startDate", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<System.DateTime> StartDate { get; set; }


            [Google.Apis.Util.RequestParameterAttribute("status", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<StatusEnum> Status { get; set; }


            public enum StatusEnum
            {
                /// <summary>Comments that have had their content removed</summary>
                [Google.Apis.Util.StringValueAttribute("emptied")]
                Emptied,
                /// <summary>Comments that are publicly visible</summary>
                [Google.Apis.Util.StringValueAttribute("live")]
                Live,
                /// <summary>Comments that are awaiting administrator approval</summary>
                [Google.Apis.Util.StringValueAttribute("pending")]
                Pending,
                /// <summary>Comments marked as spam by the administrator</summary>
                [Google.Apis.Util.StringValueAttribute("spam")]
                Spam,
            }

            /// <summary>Access level with which to view the returned result. Note that some fields require elevated
            /// access.</summary>
            [Google.Apis.Util.RequestParameterAttribute("view", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<ViewEnum> View { get; set; }

            /// <summary>Access level with which to view the returned result. Note that some fields require elevated
            /// access.</summary>
            public enum ViewEnum
            {
                /// <summary>Admin level detail</summary>
                [Google.Apis.Util.StringValueAttribute("ADMIN")]
                ADMIN,
                /// <summary>Author level detail</summary>
                [Google.Apis.Util.StringValueAttribute("AUTHOR")]
                AUTHOR,
                /// <summary>Reader level detail</summary>
                [Google.Apis.Util.StringValueAttribute("READER")]
                READER,
            }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "blogs/{blogId}/posts/{postId}/comments"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "blogId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "blogId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "postId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "postId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "endDate", new Google.Apis.Discovery.Parameter
                    {
                        Name = "endDate",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "fetchBodies", new Google.Apis.Discovery.Parameter
                    {
                        Name = "fetchBodies",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "maxResults", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxResults",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "startDate", new Google.Apis.Discovery.Parameter
                    {
                        Name = "startDate",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "status", new Google.Apis.Discovery.Parameter
                    {
                        Name = "status",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "view", new Google.Apis.Discovery.Parameter
                    {
                        Name = "view",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Retrieves the comments for a blog, across all posts, possibly filtered.</summary>
        /// <param name="blogId">ID of the blog to fetch comments from.</param>
        public virtual ListByBlogRequest ListByBlog(string blogId)
        {
            return new ListByBlogRequest(service, blogId);
        }

        /// <summary>Retrieves the comments for a blog, across all posts, possibly filtered.</summary>
        public class ListByBlogRequest : BloggerBaseServiceRequest<Google.Apis.Blogger.v3.Data.CommentList>
        {
            /// <summary>Constructs a new ListByBlog request.</summary>
            public ListByBlogRequest(Google.Apis.Services.IClientService service, string blogId)
                : base(service)
            {
                BlogId = blogId;
                InitParameters();
            }


            /// <summary>ID of the blog to fetch comments from.</summary>
            [Google.Apis.Util.RequestParameterAttribute("blogId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string BlogId { get; private set; }

            /// <summary>Latest date of comment to fetch, a date-time with RFC 3339 formatting.</summary>
            [Google.Apis.Util.RequestParameterAttribute("endDate", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<System.DateTime> EndDate { get; set; }

            /// <summary>Whether the body content of the comments is included.</summary>
            [Google.Apis.Util.RequestParameterAttribute("fetchBodies", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> FetchBodies { get; set; }

            /// <summary>Maximum number of comments to include in the result.</summary>
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxResults { get; set; }

            /// <summary>Continuation token if request is paged.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }

            /// <summary>Earliest date of comment to fetch, a date-time with RFC 3339 formatting.</summary>
            [Google.Apis.Util.RequestParameterAttribute("startDate", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<System.DateTime> StartDate { get; set; }


            [Google.Apis.Util.RequestParameterAttribute("status", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<StatusEnum> Status { get; set; }


            public enum StatusEnum
            {
                /// <summary>Comments that have had their content removed</summary>
                [Google.Apis.Util.StringValueAttribute("emptied")]
                Emptied,
                /// <summary>Comments that are publicly visible</summary>
                [Google.Apis.Util.StringValueAttribute("live")]
                Live,
                /// <summary>Comments that are awaiting administrator approval</summary>
                [Google.Apis.Util.StringValueAttribute("pending")]
                Pending,
                /// <summary>Comments marked as spam by the administrator</summary>
                [Google.Apis.Util.StringValueAttribute("spam")]
                Spam,
            }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "listByBlog"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "blogs/{blogId}/comments"; }
            }

            /// <summary>Initializes ListByBlog parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "blogId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "blogId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "endDate", new Google.Apis.Discovery.Parameter
                    {
                        Name = "endDate",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "fetchBodies", new Google.Apis.Discovery.Parameter
                    {
                        Name = "fetchBodies",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "maxResults", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxResults",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "startDate", new Google.Apis.Discovery.Parameter
                    {
                        Name = "startDate",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "status", new Google.Apis.Discovery.Parameter
                    {
                        Name = "status",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Marks a comment as spam.</summary>
        /// <param name="blogId">The ID of the Blog.</param>
        /// <param name="postId">The ID of the Post.</param>
        ///
        /// <param name="commentId">The ID of the comment to mark as spam.</param>
        public virtual MarkAsSpamRequest MarkAsSpam(string blogId, string postId, string commentId)
        {
            return new MarkAsSpamRequest(service, blogId, postId, commentId);
        }

        /// <summary>Marks a comment as spam.</summary>
        public class MarkAsSpamRequest : BloggerBaseServiceRequest<Google.Apis.Blogger.v3.Data.Comment>
        {
            /// <summary>Constructs a new MarkAsSpam request.</summary>
            public MarkAsSpamRequest(Google.Apis.Services.IClientService service, string blogId, string postId, string commentId)
                : base(service)
            {
                BlogId = blogId;
                PostId = postId;
                CommentId = commentId;
                InitParameters();
            }


            /// <summary>The ID of the Blog.</summary>
            [Google.Apis.Util.RequestParameterAttribute("blogId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string BlogId { get; private set; }

            /// <summary>The ID of the Post.</summary>
            [Google.Apis.Util.RequestParameterAttribute("postId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string PostId { get; private set; }

            /// <summary>The ID of the comment to mark as spam.</summary>
            [Google.Apis.Util.RequestParameterAttribute("commentId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string CommentId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "markAsSpam"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "blogs/{blogId}/posts/{postId}/comments/{commentId}/spam"; }
            }

            /// <summary>Initializes MarkAsSpam parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "blogId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "blogId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "postId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "postId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "commentId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "commentId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Removes the content of a comment.</summary>
        /// <param name="blogId">The ID of the Blog.</param>
        /// <param name="postId">The ID of the Post.</param>
        ///
        /// <param name="commentId">The ID of the comment to delete content from.</param>
        public virtual RemoveContentRequest RemoveContent(string blogId, string postId, string commentId)
        {
            return new RemoveContentRequest(service, blogId, postId, commentId);
        }

        /// <summary>Removes the content of a comment.</summary>
        public class RemoveContentRequest : BloggerBaseServiceRequest<Google.Apis.Blogger.v3.Data.Comment>
        {
            /// <summary>Constructs a new RemoveContent request.</summary>
            public RemoveContentRequest(Google.Apis.Services.IClientService service, string blogId, string postId, string commentId)
                : base(service)
            {
                BlogId = blogId;
                PostId = postId;
                CommentId = commentId;
                InitParameters();
            }


            /// <summary>The ID of the Blog.</summary>
            [Google.Apis.Util.RequestParameterAttribute("blogId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string BlogId { get; private set; }

            /// <summary>The ID of the Post.</summary>
            [Google.Apis.Util.RequestParameterAttribute("postId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string PostId { get; private set; }

            /// <summary>The ID of the comment to delete content from.</summary>
            [Google.Apis.Util.RequestParameterAttribute("commentId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string CommentId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "removeContent"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "blogs/{blogId}/posts/{postId}/comments/{commentId}/removecontent"; }
            }

            /// <summary>Initializes RemoveContent parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "blogId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "blogId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "postId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "postId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "commentId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "commentId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }

    /// <summary>The "pageViews" collection of methods.</summary>
    public class PageViewsResource
    {
        private const string Resource = "pageViews";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public PageViewsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Retrieve pageview stats for a Blog.</summary>
        /// <param name="blogId">The ID of the blog to get.</param>
        public virtual GetRequest Get(string blogId)
        {
            return new GetRequest(service, blogId);
        }

        /// <summary>Retrieve pageview stats for a Blog.</summary>
        public class GetRequest : BloggerBaseServiceRequest<Google.Apis.Blogger.v3.Data.Pageviews>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string blogId)
                : base(service)
            {
                BlogId = blogId;
                InitParameters();
            }


            /// <summary>The ID of the blog to get.</summary>
            [Google.Apis.Util.RequestParameterAttribute("blogId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string BlogId { get; private set; }


            [Google.Apis.Util.RequestParameterAttribute("range", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<RangeEnum> Range { get; set; }


            public enum RangeEnum
            {
                /// <summary>Page view counts from the last thirty days.</summary>
                [Google.Apis.Util.StringValueAttribute("30DAYS")]
                Value30DAYS,
                /// <summary>Page view counts from the last seven days.</summary>
                [Google.Apis.Util.StringValueAttribute("7DAYS")]
                Value7DAYS,
                /// <summary>Total page view counts from all time.</summary>
                [Google.Apis.Util.StringValueAttribute("all")]
                All,
            }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "blogs/{blogId}/pageviews"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "blogId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "blogId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "range", new Google.Apis.Discovery.Parameter
                    {
                        Name = "range",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }

    /// <summary>The "pages" collection of methods.</summary>
    public class PagesResource
    {
        private const string Resource = "pages";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public PagesResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Delete a page by ID.</summary>
        /// <param name="blogId">The ID of the Blog.</param>
        /// <param name="pageId">The ID of the Page.</param>
        public virtual DeleteRequest Delete(string blogId, string pageId)
        {
            return new DeleteRequest(service, blogId, pageId);
        }

        /// <summary>Delete a page by ID.</summary>
        public class DeleteRequest : BloggerBaseServiceRequest<string>
        {
            /// <summary>Constructs a new Delete request.</summary>
            public DeleteRequest(Google.Apis.Services.IClientService service, string blogId, string pageId)
                : base(service)
            {
                BlogId = blogId;
                PageId = pageId;
                InitParameters();
            }


            /// <summary>The ID of the Blog.</summary>
            [Google.Apis.Util.RequestParameterAttribute("blogId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string BlogId { get; private set; }

            /// <summary>The ID of the Page.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string PageId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "delete"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "DELETE"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "blogs/{blogId}/pages/{pageId}"; }
            }

            /// <summary>Initializes Delete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "blogId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "blogId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Gets one blog page by ID.</summary>
        /// <param name="blogId">ID of the blog containing the page.</param>
        /// <param name="pageId">The ID of the page to
        /// get.</param>
        public virtual GetRequest Get(string blogId, string pageId)
        {
            return new GetRequest(service, blogId, pageId);
        }

        /// <summary>Gets one blog page by ID.</summary>
        public class GetRequest : BloggerBaseServiceRequest<Google.Apis.Blogger.v3.Data.Page>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string blogId, string pageId)
                : base(service)
            {
                BlogId = blogId;
                PageId = pageId;
                InitParameters();
            }


            /// <summary>ID of the blog containing the page.</summary>
            [Google.Apis.Util.RequestParameterAttribute("blogId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string BlogId { get; private set; }

            /// <summary>The ID of the page to get.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string PageId { get; private set; }


            [Google.Apis.Util.RequestParameterAttribute("view", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<ViewEnum> View { get; set; }


            public enum ViewEnum
            {
                /// <summary>Admin level detail</summary>
                [Google.Apis.Util.StringValueAttribute("ADMIN")]
                ADMIN,
                /// <summary>Author level detail</summary>
                [Google.Apis.Util.StringValueAttribute("AUTHOR")]
                AUTHOR,
                /// <summary>Reader level detail</summary>
                [Google.Apis.Util.StringValueAttribute("READER")]
                READER,
            }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "blogs/{blogId}/pages/{pageId}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "blogId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "blogId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "view", new Google.Apis.Discovery.Parameter
                    {
                        Name = "view",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Add a page.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="blogId">ID of the blog to add the page to.</param>
        public virtual InsertRequest Insert(Google.Apis.Blogger.v3.Data.Page body, string blogId)
        {
            return new InsertRequest(service, body, blogId);
        }

        /// <summary>Add a page.</summary>
        public class InsertRequest : BloggerBaseServiceRequest<Google.Apis.Blogger.v3.Data.Page>
        {
            /// <summary>Constructs a new Insert request.</summary>
            public InsertRequest(Google.Apis.Services.IClientService service, Google.Apis.Blogger.v3.Data.Page body, string blogId)
                : base(service)
            {
                BlogId = blogId;
                Body = body;
                InitParameters();
            }


            /// <summary>ID of the blog to add the page to.</summary>
            [Google.Apis.Util.RequestParameterAttribute("blogId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string BlogId { get; private set; }

            /// <summary>Whether to create the page as a draft (default: false).</summary>
            [Google.Apis.Util.RequestParameterAttribute("isDraft", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> IsDraft { get; set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Blogger.v3.Data.Page Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "insert"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "blogs/{blogId}/pages"; }
            }

            /// <summary>Initializes Insert parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "blogId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "blogId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "isDraft", new Google.Apis.Discovery.Parameter
                    {
                        Name = "isDraft",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Retrieves the pages for a blog, optionally including non-LIVE statuses.</summary>
        /// <param name="blogId">ID of the blog to fetch Pages from.</param>
        public virtual ListRequest List(string blogId)
        {
            return new ListRequest(service, blogId);
        }

        /// <summary>Retrieves the pages for a blog, optionally including non-LIVE statuses.</summary>
        public class ListRequest : BloggerBaseServiceRequest<Google.Apis.Blogger.v3.Data.PageList>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, string blogId)
                : base(service)
            {
                BlogId = blogId;
                InitParameters();
            }


            /// <summary>ID of the blog to fetch Pages from.</summary>
            [Google.Apis.Util.RequestParameterAttribute("blogId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string BlogId { get; private set; }

            /// <summary>Whether to retrieve the Page bodies.</summary>
            [Google.Apis.Util.RequestParameterAttribute("fetchBodies", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> FetchBodies { get; set; }

            /// <summary>Maximum number of Pages to fetch.</summary>
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxResults { get; set; }

            /// <summary>Continuation token if the request is paged.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }


            [Google.Apis.Util.RequestParameterAttribute("status", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<StatusEnum> Status { get; set; }


            public enum StatusEnum
            {
                /// <summary>Draft (unpublished) Pages</summary>
                [Google.Apis.Util.StringValueAttribute("draft")]
                Draft,
                /// <summary>Pages that are publicly visible</summary>
                [Google.Apis.Util.StringValueAttribute("live")]
                Live,
            }

            /// <summary>Access level with which to view the returned result. Note that some fields require elevated
            /// access.</summary>
            [Google.Apis.Util.RequestParameterAttribute("view", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<ViewEnum> View { get; set; }

            /// <summary>Access level with which to view the returned result. Note that some fields require elevated
            /// access.</summary>
            public enum ViewEnum
            {
                /// <summary>Admin level detail</summary>
                [Google.Apis.Util.StringValueAttribute("ADMIN")]
                ADMIN,
                /// <summary>Author level detail</summary>
                [Google.Apis.Util.StringValueAttribute("AUTHOR")]
                AUTHOR,
                /// <summary>Reader level detail</summary>
                [Google.Apis.Util.StringValueAttribute("READER")]
                READER,
            }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "blogs/{blogId}/pages"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "blogId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "blogId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "fetchBodies", new Google.Apis.Discovery.Parameter
                    {
                        Name = "fetchBodies",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "maxResults", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxResults",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "status", new Google.Apis.Discovery.Parameter
                    {
                        Name = "status",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "view", new Google.Apis.Discovery.Parameter
                    {
                        Name = "view",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Update a page. This method supports patch semantics.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="blogId">The ID of the Blog.</param>
        /// <param name="pageId">The ID of the Page.</param>
        public virtual PatchRequest Patch(Google.Apis.Blogger.v3.Data.Page body, string blogId, string pageId)
        {
            return new PatchRequest(service, body, blogId, pageId);
        }

        /// <summary>Update a page. This method supports patch semantics.</summary>
        public class PatchRequest : BloggerBaseServiceRequest<Google.Apis.Blogger.v3.Data.Page>
        {
            /// <summary>Constructs a new Patch request.</summary>
            public PatchRequest(Google.Apis.Services.IClientService service, Google.Apis.Blogger.v3.Data.Page body, string blogId, string pageId)
                : base(service)
            {
                BlogId = blogId;
                PageId = pageId;
                Body = body;
                InitParameters();
            }


            /// <summary>The ID of the Blog.</summary>
            [Google.Apis.Util.RequestParameterAttribute("blogId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string BlogId { get; private set; }

            /// <summary>The ID of the Page.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string PageId { get; private set; }

            /// <summary>Whether a publish action should be performed when the page is updated (default:
            /// false).</summary>
            [Google.Apis.Util.RequestParameterAttribute("publish", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> Publish { get; set; }

            /// <summary>Whether a revert action should be performed when the page is updated (default:
            /// false).</summary>
            [Google.Apis.Util.RequestParameterAttribute("revert", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> Revert { get; set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Blogger.v3.Data.Page Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "patch"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "PATCH"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "blogs/{blogId}/pages/{pageId}"; }
            }

            /// <summary>Initializes Patch parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "blogId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "blogId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "publish", new Google.Apis.Discovery.Parameter
                    {
                        Name = "publish",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "revert", new Google.Apis.Discovery.Parameter
                    {
                        Name = "revert",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Publishes a draft page.</summary>
        /// <param name="blogId">The ID of the blog.</param>
        /// <param name="pageId">The ID of the page.</param>
        public virtual PublishRequest Publish(string blogId, string pageId)
        {
            return new PublishRequest(service, blogId, pageId);
        }

        /// <summary>Publishes a draft page.</summary>
        public class PublishRequest : BloggerBaseServiceRequest<Google.Apis.Blogger.v3.Data.Page>
        {
            /// <summary>Constructs a new Publish request.</summary>
            public PublishRequest(Google.Apis.Services.IClientService service, string blogId, string pageId)
                : base(service)
            {
                BlogId = blogId;
                PageId = pageId;
                InitParameters();
            }


            /// <summary>The ID of the blog.</summary>
            [Google.Apis.Util.RequestParameterAttribute("blogId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string BlogId { get; private set; }

            /// <summary>The ID of the page.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string PageId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "publish"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "blogs/{blogId}/pages/{pageId}/publish"; }
            }

            /// <summary>Initializes Publish parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "blogId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "blogId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Revert a published or scheduled page to draft state.</summary>
        /// <param name="blogId">The ID of the blog.</param>
        /// <param name="pageId">The ID of the page.</param>
        public virtual RevertRequest Revert(string blogId, string pageId)
        {
            return new RevertRequest(service, blogId, pageId);
        }

        /// <summary>Revert a published or scheduled page to draft state.</summary>
        public class RevertRequest : BloggerBaseServiceRequest<Google.Apis.Blogger.v3.Data.Page>
        {
            /// <summary>Constructs a new Revert request.</summary>
            public RevertRequest(Google.Apis.Services.IClientService service, string blogId, string pageId)
                : base(service)
            {
                BlogId = blogId;
                PageId = pageId;
                InitParameters();
            }


            /// <summary>The ID of the blog.</summary>
            [Google.Apis.Util.RequestParameterAttribute("blogId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string BlogId { get; private set; }

            /// <summary>The ID of the page.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string PageId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "revert"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "blogs/{blogId}/pages/{pageId}/revert"; }
            }

            /// <summary>Initializes Revert parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "blogId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "blogId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Update a page.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="blogId">The ID of the Blog.</param>
        /// <param name="pageId">The ID of the Page.</param>
        public virtual UpdateRequest Update(Google.Apis.Blogger.v3.Data.Page body, string blogId, string pageId)
        {
            return new UpdateRequest(service, body, blogId, pageId);
        }

        /// <summary>Update a page.</summary>
        public class UpdateRequest : BloggerBaseServiceRequest<Google.Apis.Blogger.v3.Data.Page>
        {
            /// <summary>Constructs a new Update request.</summary>
            public UpdateRequest(Google.Apis.Services.IClientService service, Google.Apis.Blogger.v3.Data.Page body, string blogId, string pageId)
                : base(service)
            {
                BlogId = blogId;
                PageId = pageId;
                Body = body;
                InitParameters();
            }


            /// <summary>The ID of the Blog.</summary>
            [Google.Apis.Util.RequestParameterAttribute("blogId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string BlogId { get; private set; }

            /// <summary>The ID of the Page.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string PageId { get; private set; }

            /// <summary>Whether a publish action should be performed when the page is updated (default:
            /// false).</summary>
            [Google.Apis.Util.RequestParameterAttribute("publish", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> Publish { get; set; }

            /// <summary>Whether a revert action should be performed when the page is updated (default:
            /// false).</summary>
            [Google.Apis.Util.RequestParameterAttribute("revert", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> Revert { get; set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Blogger.v3.Data.Page Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "update"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "PUT"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "blogs/{blogId}/pages/{pageId}"; }
            }

            /// <summary>Initializes Update parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "blogId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "blogId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "publish", new Google.Apis.Discovery.Parameter
                    {
                        Name = "publish",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "revert", new Google.Apis.Discovery.Parameter
                    {
                        Name = "revert",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }

    /// <summary>The "postUserInfos" collection of methods.</summary>
    public class PostUserInfosResource
    {
        private const string Resource = "postUserInfos";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public PostUserInfosResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Gets one post and user info pair, by post ID and user ID. The post user info contains per-user
        /// information about the post, such as access rights, specific to the user.</summary>
        /// <param name="userId">ID of the user for the per-user information to be fetched. Either the word 'self' (sans quote
        /// marks) or the user's profile identifier.</param>
        /// <param name="blogId">The ID of the blog.</param>
        ///
        /// <param name="postId">The ID of the post to get.</param>
        public virtual GetRequest Get(string userId, string blogId, string postId)
        {
            return new GetRequest(service, userId, blogId, postId);
        }

        /// <summary>Gets one post and user info pair, by post ID and user ID. The post user info contains per-user
        /// information about the post, such as access rights, specific to the user.</summary>
        public class GetRequest : BloggerBaseServiceRequest<Google.Apis.Blogger.v3.Data.PostUserInfo>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string userId, string blogId, string postId)
                : base(service)
            {
                UserId = userId;
                BlogId = blogId;
                PostId = postId;
                InitParameters();
            }


            /// <summary>ID of the user for the per-user information to be fetched. Either the word 'self' (sans quote
            /// marks) or the user's profile identifier.</summary>
            [Google.Apis.Util.RequestParameterAttribute("userId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string UserId { get; private set; }

            /// <summary>The ID of the blog.</summary>
            [Google.Apis.Util.RequestParameterAttribute("blogId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string BlogId { get; private set; }

            /// <summary>The ID of the post to get.</summary>
            [Google.Apis.Util.RequestParameterAttribute("postId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string PostId { get; private set; }

            /// <summary>Maximum number of comments to pull back on a post.</summary>
            [Google.Apis.Util.RequestParameterAttribute("maxComments", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxComments { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "users/{userId}/blogs/{blogId}/posts/{postId}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "userId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "userId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "blogId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "blogId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "postId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "postId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "maxComments", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxComments",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Retrieves a list of post and post user info pairs, possibly filtered. The post user info contains
        /// per-user information about the post, such as access rights, specific to the user.</summary>
        /// <param name="userId">ID of the user for the per-user information to be fetched. Either the word 'self' (sans quote
        /// marks) or the user's profile identifier.</param>
        /// <param name="blogId">ID of the blog to fetch posts
        /// from.</param>
        public virtual ListRequest List(string userId, string blogId)
        {
            return new ListRequest(service, userId, blogId);
        }

        /// <summary>Retrieves a list of post and post user info pairs, possibly filtered. The post user info contains
        /// per-user information about the post, such as access rights, specific to the user.</summary>
        public class ListRequest : BloggerBaseServiceRequest<Google.Apis.Blogger.v3.Data.PostUserInfosList>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, string userId, string blogId)
                : base(service)
            {
                UserId = userId;
                BlogId = blogId;
                InitParameters();
            }


            /// <summary>ID of the user for the per-user information to be fetched. Either the word 'self' (sans quote
            /// marks) or the user's profile identifier.</summary>
            [Google.Apis.Util.RequestParameterAttribute("userId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string UserId { get; private set; }

            /// <summary>ID of the blog to fetch posts from.</summary>
            [Google.Apis.Util.RequestParameterAttribute("blogId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string BlogId { get; private set; }

            /// <summary>Latest post date to fetch, a date-time with RFC 3339 formatting.</summary>
            [Google.Apis.Util.RequestParameterAttribute("endDate", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<System.DateTime> EndDate { get; set; }

            /// <summary>Whether the body content of posts is included. Default is false.</summary>
            /// [default: false]
            [Google.Apis.Util.RequestParameterAttribute("fetchBodies", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> FetchBodies { get; set; }

            /// <summary>Comma-separated list of labels to search for.</summary>
            [Google.Apis.Util.RequestParameterAttribute("labels", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Labels { get; set; }

            /// <summary>Maximum number of posts to fetch.</summary>
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxResults { get; set; }

            /// <summary>Sort order applied to search results. Default is published.</summary>
            /// [default: PUBLISHED]
            [Google.Apis.Util.RequestParameterAttribute("orderBy", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<OrderByEnum> OrderBy { get; set; }

            /// <summary>Sort order applied to search results. Default is published.</summary>
            public enum OrderByEnum
            {
                /// <summary>Order by the date the post was published</summary>
                [Google.Apis.Util.StringValueAttribute("published")]
                Published,
                /// <summary>Order by the date the post was last updated</summary>
                [Google.Apis.Util.StringValueAttribute("updated")]
                Updated,
            }

            /// <summary>Continuation token if the request is paged.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }

            /// <summary>Earliest post date to fetch, a date-time with RFC 3339 formatting.</summary>
            [Google.Apis.Util.RequestParameterAttribute("startDate", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<System.DateTime> StartDate { get; set; }


            [Google.Apis.Util.RequestParameterAttribute("status", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<StatusEnum> Status { get; set; }


            public enum StatusEnum
            {
                /// <summary>Draft posts</summary>
                [Google.Apis.Util.StringValueAttribute("draft")]
                Draft,
                /// <summary>Published posts</summary>
                [Google.Apis.Util.StringValueAttribute("live")]
                Live,
                /// <summary>Posts that are scheduled to publish in future.</summary>
                [Google.Apis.Util.StringValueAttribute("scheduled")]
                Scheduled,
            }

            /// <summary>Access level with which to view the returned result. Note that some fields require elevated
            /// access.</summary>
            [Google.Apis.Util.RequestParameterAttribute("view", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<ViewEnum> View { get; set; }

            /// <summary>Access level with which to view the returned result. Note that some fields require elevated
            /// access.</summary>
            public enum ViewEnum
            {
                /// <summary>Admin level detail</summary>
                [Google.Apis.Util.StringValueAttribute("ADMIN")]
                ADMIN,
                /// <summary>Author level detail</summary>
                [Google.Apis.Util.StringValueAttribute("AUTHOR")]
                AUTHOR,
                /// <summary>Reader level detail</summary>
                [Google.Apis.Util.StringValueAttribute("READER")]
                READER,
            }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "users/{userId}/blogs/{blogId}/posts"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "userId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "userId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "blogId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "blogId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "endDate", new Google.Apis.Discovery.Parameter
                    {
                        Name = "endDate",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "fetchBodies", new Google.Apis.Discovery.Parameter
                    {
                        Name = "fetchBodies",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "false",
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "labels", new Google.Apis.Discovery.Parameter
                    {
                        Name = "labels",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "maxResults", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxResults",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "orderBy", new Google.Apis.Discovery.Parameter
                    {
                        Name = "orderBy",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "PUBLISHED",
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "startDate", new Google.Apis.Discovery.Parameter
                    {
                        Name = "startDate",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "status", new Google.Apis.Discovery.Parameter
                    {
                        Name = "status",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "view", new Google.Apis.Discovery.Parameter
                    {
                        Name = "view",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }

    /// <summary>The "posts" collection of methods.</summary>
    public class PostsResource
    {
        private const string Resource = "posts";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public PostsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Delete a post by ID.</summary>
        /// <param name="blogId">The ID of the Blog.</param>
        /// <param name="postId">The ID of the Post.</param>
        public virtual DeleteRequest Delete(string blogId, string postId)
        {
            return new DeleteRequest(service, blogId, postId);
        }

        /// <summary>Delete a post by ID.</summary>
        public class DeleteRequest : BloggerBaseServiceRequest<string>
        {
            /// <summary>Constructs a new Delete request.</summary>
            public DeleteRequest(Google.Apis.Services.IClientService service, string blogId, string postId)
                : base(service)
            {
                BlogId = blogId;
                PostId = postId;
                InitParameters();
            }


            /// <summary>The ID of the Blog.</summary>
            [Google.Apis.Util.RequestParameterAttribute("blogId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string BlogId { get; private set; }

            /// <summary>The ID of the Post.</summary>
            [Google.Apis.Util.RequestParameterAttribute("postId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string PostId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "delete"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "DELETE"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "blogs/{blogId}/posts/{postId}"; }
            }

            /// <summary>Initializes Delete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "blogId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "blogId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "postId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "postId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Get a post by ID.</summary>
        /// <param name="blogId">ID of the blog to fetch the post from.</param>
        /// <param name="postId">The ID of the
        /// post</param>
        public virtual GetRequest Get(string blogId, string postId)
        {
            return new GetRequest(service, blogId, postId);
        }

        /// <summary>Get a post by ID.</summary>
        public class GetRequest : BloggerBaseServiceRequest<Google.Apis.Blogger.v3.Data.Post>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string blogId, string postId)
                : base(service)
            {
                BlogId = blogId;
                PostId = postId;
                InitParameters();
            }


            /// <summary>ID of the blog to fetch the post from.</summary>
            [Google.Apis.Util.RequestParameterAttribute("blogId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string BlogId { get; private set; }

            /// <summary>The ID of the post</summary>
            [Google.Apis.Util.RequestParameterAttribute("postId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string PostId { get; private set; }

            /// <summary>Whether the body content of the post is included (default: true). This should be set to false
            /// when the post bodies are not required, to help minimize traffic.</summary>
            /// [default: true]
            [Google.Apis.Util.RequestParameterAttribute("fetchBody", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> FetchBody { get; set; }

            /// <summary>Whether image URL metadata for each post is included (default: false).</summary>
            [Google.Apis.Util.RequestParameterAttribute("fetchImages", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> FetchImages { get; set; }

            /// <summary>Maximum number of comments to pull back on a post.</summary>
            [Google.Apis.Util.RequestParameterAttribute("maxComments", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxComments { get; set; }

            /// <summary>Access level with which to view the returned result. Note that some fields require elevated
            /// access.</summary>
            [Google.Apis.Util.RequestParameterAttribute("view", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<ViewEnum> View { get; set; }

            /// <summary>Access level with which to view the returned result. Note that some fields require elevated
            /// access.</summary>
            public enum ViewEnum
            {
                /// <summary>Admin level detail</summary>
                [Google.Apis.Util.StringValueAttribute("ADMIN")]
                ADMIN,
                /// <summary>Author level detail</summary>
                [Google.Apis.Util.StringValueAttribute("AUTHOR")]
                AUTHOR,
                /// <summary>Reader level detail</summary>
                [Google.Apis.Util.StringValueAttribute("READER")]
                READER,
            }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "blogs/{blogId}/posts/{postId}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "blogId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "blogId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "postId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "postId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "fetchBody", new Google.Apis.Discovery.Parameter
                    {
                        Name = "fetchBody",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "true",
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "fetchImages", new Google.Apis.Discovery.Parameter
                    {
                        Name = "fetchImages",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "maxComments", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxComments",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "view", new Google.Apis.Discovery.Parameter
                    {
                        Name = "view",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Retrieve a Post by Path.</summary>
        /// <param name="blogId">ID of the blog to fetch the post from.</param>
        /// <param name="path">Path of the Post to
        /// retrieve.</param>
        public virtual GetByPathRequest GetByPath(string blogId, string path)
        {
            return new GetByPathRequest(service, blogId, path);
        }

        /// <summary>Retrieve a Post by Path.</summary>
        public class GetByPathRequest : BloggerBaseServiceRequest<Google.Apis.Blogger.v3.Data.Post>
        {
            /// <summary>Constructs a new GetByPath request.</summary>
            public GetByPathRequest(Google.Apis.Services.IClientService service, string blogId, string path)
                : base(service)
            {
                BlogId = blogId;
                Path = path;
                InitParameters();
            }


            /// <summary>ID of the blog to fetch the post from.</summary>
            [Google.Apis.Util.RequestParameterAttribute("blogId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string BlogId { get; private set; }

            /// <summary>Path of the Post to retrieve.</summary>
            [Google.Apis.Util.RequestParameterAttribute("path", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Path { get; private set; }

            /// <summary>Maximum number of comments to pull back on a post.</summary>
            [Google.Apis.Util.RequestParameterAttribute("maxComments", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxComments { get; set; }

            /// <summary>Access level with which to view the returned result. Note that some fields require elevated
            /// access.</summary>
            [Google.Apis.Util.RequestParameterAttribute("view", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<ViewEnum> View { get; set; }

            /// <summary>Access level with which to view the returned result. Note that some fields require elevated
            /// access.</summary>
            public enum ViewEnum
            {
                /// <summary>Admin level detail</summary>
                [Google.Apis.Util.StringValueAttribute("ADMIN")]
                ADMIN,
                /// <summary>Author level detail</summary>
                [Google.Apis.Util.StringValueAttribute("AUTHOR")]
                AUTHOR,
                /// <summary>Reader level detail</summary>
                [Google.Apis.Util.StringValueAttribute("READER")]
                READER,
            }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "getByPath"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "blogs/{blogId}/posts/bypath"; }
            }

            /// <summary>Initializes GetByPath parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "blogId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "blogId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "path", new Google.Apis.Discovery.Parameter
                    {
                        Name = "path",
                        IsRequired = true,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "maxComments", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxComments",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "view", new Google.Apis.Discovery.Parameter
                    {
                        Name = "view",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Add a post.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="blogId">ID of the blog to add the post to.</param>
        public virtual InsertRequest Insert(Google.Apis.Blogger.v3.Data.Post body, string blogId)
        {
            return new InsertRequest(service, body, blogId);
        }

        /// <summary>Add a post.</summary>
        public class InsertRequest : BloggerBaseServiceRequest<Google.Apis.Blogger.v3.Data.Post>
        {
            /// <summary>Constructs a new Insert request.</summary>
            public InsertRequest(Google.Apis.Services.IClientService service, Google.Apis.Blogger.v3.Data.Post body, string blogId)
                : base(service)
            {
                BlogId = blogId;
                Body = body;
                InitParameters();
            }


            /// <summary>ID of the blog to add the post to.</summary>
            [Google.Apis.Util.RequestParameterAttribute("blogId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string BlogId { get; private set; }

            /// <summary>Whether the body content of the post is included with the result (default: true).</summary>
            /// [default: true]
            [Google.Apis.Util.RequestParameterAttribute("fetchBody", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> FetchBody { get; set; }

            /// <summary>Whether image URL metadata for each post is included in the returned result (default:
            /// false).</summary>
            [Google.Apis.Util.RequestParameterAttribute("fetchImages", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> FetchImages { get; set; }

            /// <summary>Whether to create the post as a draft (default: false).</summary>
            [Google.Apis.Util.RequestParameterAttribute("isDraft", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> IsDraft { get; set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Blogger.v3.Data.Post Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "insert"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "blogs/{blogId}/posts"; }
            }

            /// <summary>Initializes Insert parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "blogId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "blogId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "fetchBody", new Google.Apis.Discovery.Parameter
                    {
                        Name = "fetchBody",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "true",
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "fetchImages", new Google.Apis.Discovery.Parameter
                    {
                        Name = "fetchImages",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "isDraft", new Google.Apis.Discovery.Parameter
                    {
                        Name = "isDraft",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Retrieves a list of posts, possibly filtered.</summary>
        /// <param name="blogId">ID of the blog to fetch posts from.</param>
        public virtual ListRequest List(string blogId)
        {
            return new ListRequest(service, blogId);
        }

        /// <summary>Retrieves a list of posts, possibly filtered.</summary>
        public class ListRequest : BloggerBaseServiceRequest<Google.Apis.Blogger.v3.Data.PostList>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, string blogId)
                : base(service)
            {
                BlogId = blogId;
                InitParameters();
            }


            /// <summary>ID of the blog to fetch posts from.</summary>
            [Google.Apis.Util.RequestParameterAttribute("blogId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string BlogId { get; private set; }

            /// <summary>Latest post date to fetch, a date-time with RFC 3339 formatting.</summary>
            [Google.Apis.Util.RequestParameterAttribute("endDate", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<System.DateTime> EndDate { get; set; }

            /// <summary>Whether the body content of posts is included (default: true). This should be set to false when
            /// the post bodies are not required, to help minimize traffic.</summary>
            /// [default: true]
            [Google.Apis.Util.RequestParameterAttribute("fetchBodies", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> FetchBodies { get; set; }

            /// <summary>Whether image URL metadata for each post is included.</summary>
            [Google.Apis.Util.RequestParameterAttribute("fetchImages", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> FetchImages { get; set; }

            /// <summary>Comma-separated list of labels to search for.</summary>
            [Google.Apis.Util.RequestParameterAttribute("labels", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Labels { get; set; }

            /// <summary>Maximum number of posts to fetch.</summary>
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxResults { get; set; }

            /// <summary>Sort search results</summary>
            /// [default: PUBLISHED]
            [Google.Apis.Util.RequestParameterAttribute("orderBy", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<OrderByEnum> OrderBy { get; set; }

            /// <summary>Sort search results</summary>
            public enum OrderByEnum
            {
                /// <summary>Order by the date the post was published</summary>
                [Google.Apis.Util.StringValueAttribute("published")]
                Published,
                /// <summary>Order by the date the post was last updated</summary>
                [Google.Apis.Util.StringValueAttribute("updated")]
                Updated,
            }

            /// <summary>Continuation token if the request is paged.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }

            /// <summary>Earliest post date to fetch, a date-time with RFC 3339 formatting.</summary>
            [Google.Apis.Util.RequestParameterAttribute("startDate", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<System.DateTime> StartDate { get; set; }

            /// <summary>Statuses to include in the results.</summary>
            [Google.Apis.Util.RequestParameterAttribute("status", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<StatusEnum> Status { get; set; }

            /// <summary>Statuses to include in the results.</summary>
            public enum StatusEnum
            {
                /// <summary>Draft (non-published) posts.</summary>
                [Google.Apis.Util.StringValueAttribute("draft")]
                Draft,
                /// <summary>Published posts</summary>
                [Google.Apis.Util.StringValueAttribute("live")]
                Live,
                /// <summary>Posts that are scheduled to publish in the future.</summary>
                [Google.Apis.Util.StringValueAttribute("scheduled")]
                Scheduled,
            }

            /// <summary>Access level with which to view the returned result. Note that some fields require escalated
            /// access.</summary>
            [Google.Apis.Util.RequestParameterAttribute("view", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<ViewEnum> View { get; set; }

            /// <summary>Access level with which to view the returned result. Note that some fields require escalated
            /// access.</summary>
            public enum ViewEnum
            {
                /// <summary>Admin level detail</summary>
                [Google.Apis.Util.StringValueAttribute("ADMIN")]
                ADMIN,
                /// <summary>Author level detail</summary>
                [Google.Apis.Util.StringValueAttribute("AUTHOR")]
                AUTHOR,
                /// <summary>Reader level detail</summary>
                [Google.Apis.Util.StringValueAttribute("READER")]
                READER,
            }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "blogs/{blogId}/posts"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "blogId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "blogId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "endDate", new Google.Apis.Discovery.Parameter
                    {
                        Name = "endDate",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "fetchBodies", new Google.Apis.Discovery.Parameter
                    {
                        Name = "fetchBodies",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "true",
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "fetchImages", new Google.Apis.Discovery.Parameter
                    {
                        Name = "fetchImages",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "labels", new Google.Apis.Discovery.Parameter
                    {
                        Name = "labels",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "maxResults", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxResults",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "orderBy", new Google.Apis.Discovery.Parameter
                    {
                        Name = "orderBy",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "PUBLISHED",
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "startDate", new Google.Apis.Discovery.Parameter
                    {
                        Name = "startDate",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "status", new Google.Apis.Discovery.Parameter
                    {
                        Name = "status",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "view", new Google.Apis.Discovery.Parameter
                    {
                        Name = "view",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Update a post. This method supports patch semantics.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="blogId">The ID of the Blog.</param>
        /// <param name="postId">The ID of the Post.</param>
        public virtual PatchRequest Patch(Google.Apis.Blogger.v3.Data.Post body, string blogId, string postId)
        {
            return new PatchRequest(service, body, blogId, postId);
        }

        /// <summary>Update a post. This method supports patch semantics.</summary>
        public class PatchRequest : BloggerBaseServiceRequest<Google.Apis.Blogger.v3.Data.Post>
        {
            /// <summary>Constructs a new Patch request.</summary>
            public PatchRequest(Google.Apis.Services.IClientService service, Google.Apis.Blogger.v3.Data.Post body, string blogId, string postId)
                : base(service)
            {
                BlogId = blogId;
                PostId = postId;
                Body = body;
                InitParameters();
            }


            /// <summary>The ID of the Blog.</summary>
            [Google.Apis.Util.RequestParameterAttribute("blogId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string BlogId { get; private set; }

            /// <summary>The ID of the Post.</summary>
            [Google.Apis.Util.RequestParameterAttribute("postId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string PostId { get; private set; }

            /// <summary>Whether the body content of the post is included with the result (default: true).</summary>
            /// [default: true]
            [Google.Apis.Util.RequestParameterAttribute("fetchBody", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> FetchBody { get; set; }

            /// <summary>Whether image URL metadata for each post is included in the returned result (default:
            /// false).</summary>
            [Google.Apis.Util.RequestParameterAttribute("fetchImages", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> FetchImages { get; set; }

            /// <summary>Maximum number of comments to retrieve with the returned post.</summary>
            [Google.Apis.Util.RequestParameterAttribute("maxComments", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxComments { get; set; }

            /// <summary>Whether a publish action should be performed when the post is updated (default:
            /// false).</summary>
            [Google.Apis.Util.RequestParameterAttribute("publish", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> Publish { get; set; }

            /// <summary>Whether a revert action should be performed when the post is updated (default:
            /// false).</summary>
            [Google.Apis.Util.RequestParameterAttribute("revert", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> Revert { get; set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Blogger.v3.Data.Post Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "patch"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "PATCH"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "blogs/{blogId}/posts/{postId}"; }
            }

            /// <summary>Initializes Patch parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "blogId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "blogId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "postId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "postId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "fetchBody", new Google.Apis.Discovery.Parameter
                    {
                        Name = "fetchBody",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "true",
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "fetchImages", new Google.Apis.Discovery.Parameter
                    {
                        Name = "fetchImages",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "maxComments", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxComments",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "publish", new Google.Apis.Discovery.Parameter
                    {
                        Name = "publish",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "revert", new Google.Apis.Discovery.Parameter
                    {
                        Name = "revert",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Publishes a draft post, optionally at the specific time of the given publishDate
        /// parameter.</summary>
        /// <param name="blogId">The ID of the Blog.</param>
        /// <param name="postId">The ID of the Post.</param>
        public virtual PublishRequest Publish(string blogId, string postId)
        {
            return new PublishRequest(service, blogId, postId);
        }

        /// <summary>Publishes a draft post, optionally at the specific time of the given publishDate
        /// parameter.</summary>
        public class PublishRequest : BloggerBaseServiceRequest<Google.Apis.Blogger.v3.Data.Post>
        {
            /// <summary>Constructs a new Publish request.</summary>
            public PublishRequest(Google.Apis.Services.IClientService service, string blogId, string postId)
                : base(service)
            {
                BlogId = blogId;
                PostId = postId;
                InitParameters();
            }


            /// <summary>The ID of the Blog.</summary>
            [Google.Apis.Util.RequestParameterAttribute("blogId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string BlogId { get; private set; }

            /// <summary>The ID of the Post.</summary>
            [Google.Apis.Util.RequestParameterAttribute("postId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string PostId { get; private set; }

            /// <summary>Optional date and time to schedule the publishing of the Blog. If no publishDate parameter is
            /// given, the post is either published at the a previously saved schedule date (if present), or the current
            /// time. If a future date is given, the post will be scheduled to be published.</summary>
            [Google.Apis.Util.RequestParameterAttribute("publishDate", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<System.DateTime> PublishDate { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "publish"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "blogs/{blogId}/posts/{postId}/publish"; }
            }

            /// <summary>Initializes Publish parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "blogId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "blogId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "postId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "postId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "publishDate", new Google.Apis.Discovery.Parameter
                    {
                        Name = "publishDate",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Revert a published or scheduled post to draft state.</summary>
        /// <param name="blogId">The ID of the Blog.</param>
        /// <param name="postId">The ID of the Post.</param>
        public virtual RevertRequest Revert(string blogId, string postId)
        {
            return new RevertRequest(service, blogId, postId);
        }

        /// <summary>Revert a published or scheduled post to draft state.</summary>
        public class RevertRequest : BloggerBaseServiceRequest<Google.Apis.Blogger.v3.Data.Post>
        {
            /// <summary>Constructs a new Revert request.</summary>
            public RevertRequest(Google.Apis.Services.IClientService service, string blogId, string postId)
                : base(service)
            {
                BlogId = blogId;
                PostId = postId;
                InitParameters();
            }


            /// <summary>The ID of the Blog.</summary>
            [Google.Apis.Util.RequestParameterAttribute("blogId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string BlogId { get; private set; }

            /// <summary>The ID of the Post.</summary>
            [Google.Apis.Util.RequestParameterAttribute("postId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string PostId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "revert"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "blogs/{blogId}/posts/{postId}/revert"; }
            }

            /// <summary>Initializes Revert parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "blogId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "blogId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "postId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "postId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Search for a post.</summary>
        /// <param name="blogId">ID of the blog to fetch the post from.</param>
        /// <param name="q">Query terms to search
        /// this blog for matching posts.</param>
        public virtual SearchRequest Search(string blogId, string q)
        {
            return new SearchRequest(service, blogId, q);
        }

        /// <summary>Search for a post.</summary>
        public class SearchRequest : BloggerBaseServiceRequest<Google.Apis.Blogger.v3.Data.PostList>
        {
            /// <summary>Constructs a new Search request.</summary>
            public SearchRequest(Google.Apis.Services.IClientService service, string blogId, string q)
                : base(service)
            {
                BlogId = blogId;
                Q = q;
                InitParameters();
            }


            /// <summary>ID of the blog to fetch the post from.</summary>
            [Google.Apis.Util.RequestParameterAttribute("blogId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string BlogId { get; private set; }

            /// <summary>Query terms to search this blog for matching posts.</summary>
            [Google.Apis.Util.RequestParameterAttribute("q", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Q { get; private set; }

            /// <summary>Whether the body content of posts is included (default: true). This should be set to false when
            /// the post bodies are not required, to help minimize traffic.</summary>
            /// [default: true]
            [Google.Apis.Util.RequestParameterAttribute("fetchBodies", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> FetchBodies { get; set; }

            /// <summary>Sort search results</summary>
            /// [default: PUBLISHED]
            [Google.Apis.Util.RequestParameterAttribute("orderBy", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<OrderByEnum> OrderBy { get; set; }

            /// <summary>Sort search results</summary>
            public enum OrderByEnum
            {
                /// <summary>Order by the date the post was published</summary>
                [Google.Apis.Util.StringValueAttribute("published")]
                Published,
                /// <summary>Order by the date the post was last updated</summary>
                [Google.Apis.Util.StringValueAttribute("updated")]
                Updated,
            }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "search"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "blogs/{blogId}/posts/search"; }
            }

            /// <summary>Initializes Search parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "blogId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "blogId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "q", new Google.Apis.Discovery.Parameter
                    {
                        Name = "q",
                        IsRequired = true,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "fetchBodies", new Google.Apis.Discovery.Parameter
                    {
                        Name = "fetchBodies",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "true",
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "orderBy", new Google.Apis.Discovery.Parameter
                    {
                        Name = "orderBy",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "PUBLISHED",
                        Pattern = null,
                    });
            }

        }

        /// <summary>Update a post.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="blogId">The ID of the Blog.</param>
        /// <param name="postId">The ID of the Post.</param>
        public virtual UpdateRequest Update(Google.Apis.Blogger.v3.Data.Post body, string blogId, string postId)
        {
            return new UpdateRequest(service, body, blogId, postId);
        }

        /// <summary>Update a post.</summary>
        public class UpdateRequest : BloggerBaseServiceRequest<Google.Apis.Blogger.v3.Data.Post>
        {
            /// <summary>Constructs a new Update request.</summary>
            public UpdateRequest(Google.Apis.Services.IClientService service, Google.Apis.Blogger.v3.Data.Post body, string blogId, string postId)
                : base(service)
            {
                BlogId = blogId;
                PostId = postId;
                Body = body;
                InitParameters();
            }


            /// <summary>The ID of the Blog.</summary>
            [Google.Apis.Util.RequestParameterAttribute("blogId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string BlogId { get; private set; }

            /// <summary>The ID of the Post.</summary>
            [Google.Apis.Util.RequestParameterAttribute("postId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string PostId { get; private set; }

            /// <summary>Whether the body content of the post is included with the result (default: true).</summary>
            /// [default: true]
            [Google.Apis.Util.RequestParameterAttribute("fetchBody", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> FetchBody { get; set; }

            /// <summary>Whether image URL metadata for each post is included in the returned result (default:
            /// false).</summary>
            [Google.Apis.Util.RequestParameterAttribute("fetchImages", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> FetchImages { get; set; }

            /// <summary>Maximum number of comments to retrieve with the returned post.</summary>
            [Google.Apis.Util.RequestParameterAttribute("maxComments", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxComments { get; set; }

            /// <summary>Whether a publish action should be performed when the post is updated (default:
            /// false).</summary>
            [Google.Apis.Util.RequestParameterAttribute("publish", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> Publish { get; set; }

            /// <summary>Whether a revert action should be performed when the post is updated (default:
            /// false).</summary>
            [Google.Apis.Util.RequestParameterAttribute("revert", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> Revert { get; set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Blogger.v3.Data.Post Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "update"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "PUT"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "blogs/{blogId}/posts/{postId}"; }
            }

            /// <summary>Initializes Update parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "blogId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "blogId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "postId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "postId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "fetchBody", new Google.Apis.Discovery.Parameter
                    {
                        Name = "fetchBody",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "true",
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "fetchImages", new Google.Apis.Discovery.Parameter
                    {
                        Name = "fetchImages",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "maxComments", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxComments",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "publish", new Google.Apis.Discovery.Parameter
                    {
                        Name = "publish",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "revert", new Google.Apis.Discovery.Parameter
                    {
                        Name = "revert",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }

    /// <summary>The "users" collection of methods.</summary>
    public class UsersResource
    {
        private const string Resource = "users";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public UsersResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Gets one user by ID.</summary>
        /// <param name="userId">The ID of the user to get.</param>
        public virtual GetRequest Get(string userId)
        {
            return new GetRequest(service, userId);
        }

        /// <summary>Gets one user by ID.</summary>
        public class GetRequest : BloggerBaseServiceRequest<Google.Apis.Blogger.v3.Data.User>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string userId)
                : base(service)
            {
                UserId = userId;
                InitParameters();
            }


            /// <summary>The ID of the user to get.</summary>
            [Google.Apis.Util.RequestParameterAttribute("userId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string UserId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "users/{userId}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "userId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "userId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }
}

namespace Google.Apis.Blogger.v3.Data
{    

    public class Blog : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The JSON custom meta-data for the Blog</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("customMetaData")]
        public virtual string CustomMetaData { get; set; } 

        /// <summary>The description of this blog. This is displayed underneath the title.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>The identifier for this resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>The kind of this entry. Always blogger#blog</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The locale this Blog is set to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("locale")]
        public virtual Blog.LocaleData Locale { get; set; } 

        /// <summary>The name of this blog. This is displayed as the title.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The container of pages in this blog.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pages")]
        public virtual Blog.PagesData Pages { get; set; } 

        /// <summary>The container of posts in this blog.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("posts")]
        public virtual Blog.PostsData Posts { get; set; } 

        /// <summary>RFC 3339 date-time when this blog was published.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("published")]
        public virtual string PublishedRaw { get; set; }

        /// <summary><seealso cref="System.DateTime"/> representation of <see cref="PublishedRaw"/>.</summary>
        [Newtonsoft.Json.JsonIgnore]
        public virtual System.Nullable<System.DateTime> Published
        {
            get
            {
                return Google.Apis.Util.Utilities.GetDateTimeFromString(PublishedRaw);
            }
            set
            {
                PublishedRaw = Google.Apis.Util.Utilities.GetStringFromDateTime(value);
            }
        }

        /// <summary>The API REST URL to fetch this resource from.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selfLink")]
        public virtual string SelfLink { get; set; } 

        /// <summary>The status of the blog.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("status")]
        public virtual string Status { get; set; } 

        /// <summary>RFC 3339 date-time when this blog was last updated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updated")]
        public virtual string UpdatedRaw { get; set; }

        /// <summary><seealso cref="System.DateTime"/> representation of <see cref="UpdatedRaw"/>.</summary>
        [Newtonsoft.Json.JsonIgnore]
        public virtual System.Nullable<System.DateTime> Updated
        {
            get
            {
                return Google.Apis.Util.Utilities.GetDateTimeFromString(UpdatedRaw);
            }
            set
            {
                UpdatedRaw = Google.Apis.Util.Utilities.GetStringFromDateTime(value);
            }
        }

        /// <summary>The URL where this blog is published.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("url")]
        public virtual string Url { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
        

        /// <summary>The locale this Blog is set to.</summary>
        public class LocaleData
        {
            /// <summary>The country this blog's locale is set to.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("country")]
            public virtual string Country { get; set; } 

            /// <summary>The language this blog is authored in.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("language")]
            public virtual string Language { get; set; } 

            /// <summary>The language variant this blog is authored in.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("variant")]
            public virtual string Variant { get; set; } 

        }    

        /// <summary>The container of pages in this blog.</summary>
        public class PagesData
        {
            /// <summary>The URL of the container for pages in this blog.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("selfLink")]
            public virtual string SelfLink { get; set; } 

            /// <summary>The count of pages in this blog.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("totalItems")]
            public virtual System.Nullable<int> TotalItems { get; set; } 

        }    

        /// <summary>The container of posts in this blog.</summary>
        public class PostsData
        {
            /// <summary>The List of Posts for this Blog.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("items")]
            public virtual System.Collections.Generic.IList<Post> Items { get; set; } 

            /// <summary>The URL of the container for posts in this blog.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("selfLink")]
            public virtual string SelfLink { get; set; } 

            /// <summary>The count of posts in this blog.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("totalItems")]
            public virtual System.Nullable<int> TotalItems { get; set; } 

        }
    }    

    public class BlogList : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Admin level list of blog per-user information</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("blogUserInfos")]
        public virtual System.Collections.Generic.IList<BlogUserInfo> BlogUserInfos { get; set; } 

        /// <summary>The list of Blogs this user has Authorship or Admin rights over.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("items")]
        public virtual System.Collections.Generic.IList<Blog> Items { get; set; } 

        /// <summary>The kind of this entity. Always blogger#blogList</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class BlogPerUserInfo : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>ID of the Blog resource</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("blogId")]
        public virtual string BlogId { get; set; } 

        /// <summary>True if the user has Admin level access to the blog.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("hasAdminAccess")]
        public virtual System.Nullable<bool> HasAdminAccess { get; set; } 

        /// <summary>The kind of this entity. Always blogger#blogPerUserInfo</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The Photo Album Key for the user when adding photos to the blog</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("photosAlbumKey")]
        public virtual string PhotosAlbumKey { get; set; } 

        /// <summary>Access permissions that the user has for the blog (ADMIN, AUTHOR, or READER).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("role")]
        public virtual string Role { get; set; } 

        /// <summary>ID of the User</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("userId")]
        public virtual string UserId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class BlogUserInfo : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The Blog resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("blog")]
        public virtual Blog Blog { get; set; } 

        /// <summary>Information about a User for the Blog.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("blog_user_info")]
        public virtual BlogPerUserInfo BlogUserInfoValue { get; set; } 

        /// <summary>The kind of this entity. Always blogger#blogUserInfo</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class Comment : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The author of this Comment.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("author")]
        public virtual Comment.AuthorData Author { get; set; } 

        /// <summary>Data about the blog containing this comment.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("blog")]
        public virtual Comment.BlogData Blog { get; set; } 

        /// <summary>The actual content of the comment. May include HTML markup.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("content")]
        public virtual string Content { get; set; } 

        /// <summary>The identifier for this resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>Data about the comment this is in reply to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("inReplyTo")]
        public virtual Comment.InReplyToData InReplyTo { get; set; } 

        /// <summary>The kind of this entry. Always blogger#comment</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>Data about the post containing this comment.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("post")]
        public virtual Comment.PostData Post { get; set; } 

        /// <summary>RFC 3339 date-time when this comment was published.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("published")]
        public virtual string PublishedRaw { get; set; }

        /// <summary><seealso cref="System.DateTime"/> representation of <see cref="PublishedRaw"/>.</summary>
        [Newtonsoft.Json.JsonIgnore]
        public virtual System.Nullable<System.DateTime> Published
        {
            get
            {
                return Google.Apis.Util.Utilities.GetDateTimeFromString(PublishedRaw);
            }
            set
            {
                PublishedRaw = Google.Apis.Util.Utilities.GetStringFromDateTime(value);
            }
        }

        /// <summary>The API REST URL to fetch this resource from.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selfLink")]
        public virtual string SelfLink { get; set; } 

        /// <summary>The status of the comment (only populated for admin users)</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("status")]
        public virtual string Status { get; set; } 

        /// <summary>RFC 3339 date-time when this comment was last updated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updated")]
        public virtual string UpdatedRaw { get; set; }

        /// <summary><seealso cref="System.DateTime"/> representation of <see cref="UpdatedRaw"/>.</summary>
        [Newtonsoft.Json.JsonIgnore]
        public virtual System.Nullable<System.DateTime> Updated
        {
            get
            {
                return Google.Apis.Util.Utilities.GetDateTimeFromString(UpdatedRaw);
            }
            set
            {
                UpdatedRaw = Google.Apis.Util.Utilities.GetStringFromDateTime(value);
            }
        }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
        

        /// <summary>The author of this Comment.</summary>
        public class AuthorData
        {
            /// <summary>The display name.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("displayName")]
            public virtual string DisplayName { get; set; } 

            /// <summary>The identifier of the Comment creator.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("id")]
            public virtual string Id { get; set; } 

            /// <summary>The comment creator's avatar.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("image")]
            public virtual AuthorData.ImageData Image { get; set; } 

            /// <summary>The URL of the Comment creator's Profile page.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("url")]
            public virtual string Url { get; set; } 

            

            /// <summary>The comment creator's avatar.</summary>
            public class ImageData
            {
                /// <summary>The comment creator's avatar URL.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("url")]
                public virtual string Url { get; set; } 

            }
        }    

        /// <summary>Data about the blog containing this comment.</summary>
        public class BlogData
        {
            /// <summary>The identifier of the blog containing this comment.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("id")]
            public virtual string Id { get; set; } 

        }    

        /// <summary>Data about the comment this is in reply to.</summary>
        public class InReplyToData
        {
            /// <summary>The identified of the parent of this comment.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("id")]
            public virtual string Id { get; set; } 

        }    

        /// <summary>Data about the post containing this comment.</summary>
        public class PostData
        {
            /// <summary>The identifier of the post containing this comment.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("id")]
            public virtual string Id { get; set; } 

        }
    }    

    public class CommentList : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Etag of the response.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("etag")]
        public virtual string ETag { get; set; } 

        /// <summary>The List of Comments for a Post.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("items")]
        public virtual System.Collections.Generic.IList<Comment> Items { get; set; } 

        /// <summary>The kind of this entry. Always blogger#commentList</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>Pagination token to fetch the next page, if one exists.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>Pagination token to fetch the previous page, if one exists.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("prevPageToken")]
        public virtual string PrevPageToken { get; set; } 

    }    

    public class Page : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The author of this Page.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("author")]
        public virtual Page.AuthorData Author { get; set; } 

        /// <summary>Data about the blog containing this Page.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("blog")]
        public virtual Page.BlogData Blog { get; set; } 

        /// <summary>The body content of this Page, in HTML.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("content")]
        public virtual string Content { get; set; } 

        /// <summary>Etag of the resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("etag")]
        public virtual string ETag { get; set; } 

        /// <summary>The identifier for this resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>The kind of this entity. Always blogger#page</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>RFC 3339 date-time when this Page was published.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("published")]
        public virtual string PublishedRaw { get; set; }

        /// <summary><seealso cref="System.DateTime"/> representation of <see cref="PublishedRaw"/>.</summary>
        [Newtonsoft.Json.JsonIgnore]
        public virtual System.Nullable<System.DateTime> Published
        {
            get
            {
                return Google.Apis.Util.Utilities.GetDateTimeFromString(PublishedRaw);
            }
            set
            {
                PublishedRaw = Google.Apis.Util.Utilities.GetStringFromDateTime(value);
            }
        }

        /// <summary>The API REST URL to fetch this resource from.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selfLink")]
        public virtual string SelfLink { get; set; } 

        /// <summary>The status of the page for admin resources (either LIVE or DRAFT).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("status")]
        public virtual string Status { get; set; } 

        /// <summary>The title of this entity. This is the name displayed in the Admin user interface.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("title")]
        public virtual string Title { get; set; } 

        /// <summary>RFC 3339 date-time when this Page was last updated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updated")]
        public virtual string UpdatedRaw { get; set; }

        /// <summary><seealso cref="System.DateTime"/> representation of <see cref="UpdatedRaw"/>.</summary>
        [Newtonsoft.Json.JsonIgnore]
        public virtual System.Nullable<System.DateTime> Updated
        {
            get
            {
                return Google.Apis.Util.Utilities.GetDateTimeFromString(UpdatedRaw);
            }
            set
            {
                UpdatedRaw = Google.Apis.Util.Utilities.GetStringFromDateTime(value);
            }
        }

        /// <summary>The URL that this Page is displayed at.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("url")]
        public virtual string Url { get; set; } 

        

        /// <summary>The author of this Page.</summary>
        public class AuthorData
        {
            /// <summary>The display name.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("displayName")]
            public virtual string DisplayName { get; set; } 

            /// <summary>The identifier of the Page creator.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("id")]
            public virtual string Id { get; set; } 

            /// <summary>The page author's avatar.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("image")]
            public virtual AuthorData.ImageData Image { get; set; } 

            /// <summary>The URL of the Page creator's Profile page.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("url")]
            public virtual string Url { get; set; } 

            

            /// <summary>The page author's avatar.</summary>
            public class ImageData
            {
                /// <summary>The page author's avatar URL.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("url")]
                public virtual string Url { get; set; } 

            }
        }    

        /// <summary>Data about the blog containing this Page.</summary>
        public class BlogData
        {
            /// <summary>The identifier of the blog containing this page.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("id")]
            public virtual string Id { get; set; } 

        }
    }    

    public class PageList : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Etag of the response.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("etag")]
        public virtual string ETag { get; set; } 

        /// <summary>The list of Pages for a Blog.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("items")]
        public virtual System.Collections.Generic.IList<Page> Items { get; set; } 

        /// <summary>The kind of this entity. Always blogger#pageList</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>Pagination token to fetch the next page, if one exists.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

    }    

    public class Pageviews : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Blog Id</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("blogId")]
        public virtual string BlogId { get; set; } 

        /// <summary>The container of posts in this blog.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("counts")]
        public virtual System.Collections.Generic.IList<Pageviews.CountsData> Counts { get; set; } 

        /// <summary>The kind of this entry. Always blogger#page_views</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
        

        public class CountsData
        {
            /// <summary>Count of page views for the given time range</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("count")]
            public virtual System.Nullable<long> Count { get; set; } 

            /// <summary>Time range the given count applies to</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("timeRange")]
            public virtual string TimeRange { get; set; } 

        }
    }    

    public class Post : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The author of this Post.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("author")]
        public virtual Post.AuthorData Author { get; set; } 

        /// <summary>Data about the blog containing this Post.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("blog")]
        public virtual Post.BlogData Blog { get; set; } 

        /// <summary>The content of the Post. May contain HTML markup.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("content")]
        public virtual string Content { get; set; } 

        /// <summary>The JSON meta-data for the Post.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("customMetaData")]
        public virtual string CustomMetaData { get; set; } 

        /// <summary>Etag of the resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("etag")]
        public virtual string ETag { get; set; } 

        /// <summary>The identifier of this Post.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>Display image for the Post.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("images")]
        public virtual System.Collections.Generic.IList<Post.ImagesData> Images { get; set; } 

        /// <summary>The kind of this entity. Always blogger#post</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The list of labels this Post was tagged with.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("labels")]
        public virtual System.Collections.Generic.IList<string> Labels { get; set; } 

        /// <summary>The location for geotagged posts.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("location")]
        public virtual Post.LocationData Location { get; set; } 

        /// <summary>RFC 3339 date-time when this Post was published.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("published")]
        public virtual string PublishedRaw { get; set; }

        /// <summary><seealso cref="System.DateTime"/> representation of <see cref="PublishedRaw"/>.</summary>
        [Newtonsoft.Json.JsonIgnore]
        public virtual System.Nullable<System.DateTime> Published
        {
            get
            {
                return Google.Apis.Util.Utilities.GetDateTimeFromString(PublishedRaw);
            }
            set
            {
                PublishedRaw = Google.Apis.Util.Utilities.GetStringFromDateTime(value);
            }
        }

        /// <summary>Comment control and display setting for readers of this post.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("readerComments")]
        public virtual string ReaderComments { get; set; } 

        /// <summary>The container of comments on this Post.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("replies")]
        public virtual Post.RepliesData Replies { get; set; } 

        /// <summary>The API REST URL to fetch this resource from.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selfLink")]
        public virtual string SelfLink { get; set; } 

        /// <summary>Status of the post. Only set for admin-level requests</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("status")]
        public virtual string Status { get; set; } 

        /// <summary>The title of the Post.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("title")]
        public virtual string Title { get; set; } 

        /// <summary>The title link URL, similar to atom's related link.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("titleLink")]
        public virtual string TitleLink { get; set; } 

        /// <summary>RFC 3339 date-time when this Post was last updated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updated")]
        public virtual string UpdatedRaw { get; set; }

        /// <summary><seealso cref="System.DateTime"/> representation of <see cref="UpdatedRaw"/>.</summary>
        [Newtonsoft.Json.JsonIgnore]
        public virtual System.Nullable<System.DateTime> Updated
        {
            get
            {
                return Google.Apis.Util.Utilities.GetDateTimeFromString(UpdatedRaw);
            }
            set
            {
                UpdatedRaw = Google.Apis.Util.Utilities.GetStringFromDateTime(value);
            }
        }

        /// <summary>The URL where this Post is displayed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("url")]
        public virtual string Url { get; set; } 

        

        /// <summary>The author of this Post.</summary>
        public class AuthorData
        {
            /// <summary>The display name.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("displayName")]
            public virtual string DisplayName { get; set; } 

            /// <summary>The identifier of the Post creator.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("id")]
            public virtual string Id { get; set; } 

            /// <summary>The Post author's avatar.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("image")]
            public virtual AuthorData.ImageData Image { get; set; } 

            /// <summary>The URL of the Post creator's Profile page.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("url")]
            public virtual string Url { get; set; } 

            

            /// <summary>The Post author's avatar.</summary>
            public class ImageData
            {
                /// <summary>The Post author's avatar URL.</summary>
                [Newtonsoft.Json.JsonPropertyAttribute("url")]
                public virtual string Url { get; set; } 

            }
        }    

        /// <summary>Data about the blog containing this Post.</summary>
        public class BlogData
        {
            /// <summary>The identifier of the Blog that contains this Post.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("id")]
            public virtual string Id { get; set; } 

        }    

        public class ImagesData
        {
            [Newtonsoft.Json.JsonPropertyAttribute("url")]
            public virtual string Url { get; set; } 

        }    

        /// <summary>The location for geotagged posts.</summary>
        public class LocationData
        {
            /// <summary>Location's latitude.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("lat")]
            public virtual System.Nullable<double> Lat { get; set; } 

            /// <summary>Location's longitude.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("lng")]
            public virtual System.Nullable<double> Lng { get; set; } 

            /// <summary>Location name.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("name")]
            public virtual string Name { get; set; } 

            /// <summary>Location's viewport span. Can be used when rendering a map preview.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("span")]
            public virtual string Span { get; set; } 

        }    

        /// <summary>The container of comments on this Post.</summary>
        public class RepliesData
        {
            /// <summary>The List of Comments for this Post.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("items")]
            public virtual System.Collections.Generic.IList<Comment> Items { get; set; } 

            /// <summary>The URL of the comments on this post.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("selfLink")]
            public virtual string SelfLink { get; set; } 

            /// <summary>The count of comments on this post.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("totalItems")]
            public virtual System.Nullable<long> TotalItems { get; set; } 

        }
    }    

    public class PostList : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Etag of the response.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("etag")]
        public virtual string ETag { get; set; } 

        /// <summary>The list of Posts for this Blog.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("items")]
        public virtual System.Collections.Generic.IList<Post> Items { get; set; } 

        /// <summary>The kind of this entity. Always blogger#postList</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>Pagination token to fetch the next page, if one exists.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

    }    

    public class PostPerUserInfo : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>ID of the Blog that the post resource belongs to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("blogId")]
        public virtual string BlogId { get; set; } 

        /// <summary>True if the user has Author level access to the post.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("hasEditAccess")]
        public virtual System.Nullable<bool> HasEditAccess { get; set; } 

        /// <summary>The kind of this entity. Always blogger#postPerUserInfo</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>ID of the Post resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("postId")]
        public virtual string PostId { get; set; } 

        /// <summary>ID of the User.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("userId")]
        public virtual string UserId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class PostUserInfo : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The kind of this entity. Always blogger#postUserInfo</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The Post resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("post")]
        public virtual Post Post { get; set; } 

        /// <summary>Information about a User for the Post.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("post_user_info")]
        public virtual PostPerUserInfo PostUserInfoValue { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class PostUserInfosList : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The list of Posts with User information for the post, for this Blog.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("items")]
        public virtual System.Collections.Generic.IList<PostUserInfo> Items { get; set; } 

        /// <summary>The kind of this entity. Always blogger#postList</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>Pagination token to fetch the next page, if one exists.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class User : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Profile summary information.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("about")]
        public virtual string About { get; set; } 

        /// <summary>The container of blogs for this user.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("blogs")]
        public virtual User.BlogsData Blogs { get; set; } 

        /// <summary>The timestamp of when this profile was created, in seconds since epoch.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("created")]
        public virtual string CreatedRaw { get; set; }

        /// <summary><seealso cref="System.DateTime"/> representation of <see cref="CreatedRaw"/>.</summary>
        [Newtonsoft.Json.JsonIgnore]
        public virtual System.Nullable<System.DateTime> Created
        {
            get
            {
                return Google.Apis.Util.Utilities.GetDateTimeFromString(CreatedRaw);
            }
            set
            {
                CreatedRaw = Google.Apis.Util.Utilities.GetStringFromDateTime(value);
            }
        }

        /// <summary>The display name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("displayName")]
        public virtual string DisplayName { get; set; } 

        /// <summary>The identifier for this User.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>The kind of this entity. Always blogger#user</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>This user's locale</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("locale")]
        public virtual User.LocaleData Locale { get; set; } 

        /// <summary>The API REST URL to fetch this resource from.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selfLink")]
        public virtual string SelfLink { get; set; } 

        /// <summary>The user's profile page.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("url")]
        public virtual string Url { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
        

        /// <summary>The container of blogs for this user.</summary>
        public class BlogsData
        {
            /// <summary>The URL of the Blogs for this user.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("selfLink")]
            public virtual string SelfLink { get; set; } 

        }    

        /// <summary>This user's locale</summary>
        public class LocaleData
        {
            /// <summary>The user's country setting.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("country")]
            public virtual string Country { get; set; } 

            /// <summary>The user's language setting.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("language")]
            public virtual string Language { get; set; } 

            /// <summary>The user's language variant setting.</summary>
            [Newtonsoft.Json.JsonPropertyAttribute("variant")]
            public virtual string Variant { get; set; } 

        }
    }
}
